home *** CD-ROM | disk | FTP | other *** search
Wrap
GW-BASIC | 1984-04-24 | 26.5 KB | 645 lines
10 GOTO 150 20 REM ********************** STKMGMT ***************************** 30 REM ** - STOCK PORTFOLIO MANAGEMENT - ** 40 REM ** * * * * * * ** 50 REM ** Program to Manage Data for a Personal Stock Portfolio ** 60 REM ************************************************************** 70 REM ** Copyright 1982, SoftPic Inc., Stamford, Conn. 06903 ** 80 REM ************************************************************** 90 REM ** Author : Art M. Pickard ** 100 REM * Created: 5/29/82 ** 110 REM * Edited: 6/10/82 ** 120 REM * Source: STKMGMT.BAS v 1.00 ** 130 REM * Data: PURCHASE.DAT PORTFOL.DAT ** 140 REM ************************************************************* 150 CLEAR ,,2048: DEFINT N,R,X 160 GOSUB 5970 'DISPLAY LOGO 170 CMD$="Press any Key to Begin (ENTER to By-Pass Welcome):" 180 GOSUB 310 'COMMAND PROMPT 190 IF A$=CHR$(13) THEN 230 200 GOSUB 6230 'DISPLAY WELCOME 210 CMD$="Press any Key to see Primary Options:" 220 GOSUB 310 'COMMAND PROMPT 230 GOSUB 400 'DISPLAY PRIMARY OPTION 240 GOSUB 540 'ACTIVATE FUNCTION KEYS 250 CMD$="Enter Selection (F1-F10):" 260 GOSUB 310 'COMMAND PROMPT 270 GOTO 230 280 REM ********************** PROGRAM END ************************************ 290 CLS: END 300 REM ********************* COMMAND PROMPT ********************************** 310 LOCATE 25,1: PRINT SPACE$(78);: LOCATE 25,1 320 PRINT CMD$; 'PRINT LINE 25 PROMPT 330 A$=INKEY$: IF A$="" THEN 330 340 RETURN 350 REM ******************* CURRENT ACTIVITY PROMPT *************************** 360 LOCATE 23,1: PRINT SPACE$(78);: LOCATE 23,10 370 PRINT ACT$+"......"; 'PRINT LINE 23 PROMPT 380 RETURN 390 REM ******************* PRIMARY OPTION SCREEN ***************************** 400 CLS: LOCATE 1,20: PRINT "STOCK PORTFOLIO MANAGEMENT": PRINT: PRINT 410 PRINT "OPTIONS:": PRINT 420 PRINT TAB(10) "1. Display (or Print) Current Portfolio Value;" 430 PRINT TAB(10) "2. Record Stock Purchase;" 440 PRINT TAB(10) "3. Record Stock Sale:" 450 PRINT TAB(10) "4. Print Purchase and Sale Records;" 460 PRINT TAB(10) "5. Update Purchase and Sale Records;" 470 PRINT TAB(10) "6. Update Portfolio Summary Records;" 480 PRINT TAB(10) "7. Generate Purchase/Sale Summary; (N/A)" 490 PRINT TAB(10) "8. Initialize Data File(s);" 500 PRINT TAB(10) "9. Describe Program (Help);" 510 PRINT TAB(9) "10. Exit (to Basic)." 520 RETURN 530 REM ******************* PRIMARY FUNCTION KEYS ***************************** 540 KEY(1) ON: KEY(2) ON: KEY(3) ON: KEY(4) ON: KEY(5) ON 550 KEY(6) ON: KEY(7) ON: KEY(8) ON: KEY(9) ON: KEY(10) ON 560 ON KEY(1) GOSUB 2250: ON KEY(2) GOSUB 2840: ON KEY(3) GOSUB 3160 570 ON KEY(4) GOSUB 4790: ON KEY(5) GOSUB 5360: ON KEY(6) GOSUB 3670 580 ON KEY(7) GOSUB 0: ON KEY(8) GOSUB 5670: ON KEY(9) GOSUB 2010 590 ON KEY(10) GOSUB 290 600 RETURN 610 REM ****************** PORTFOLIO VALUE SCREEN ***************************** 620 CLS: LOCATE 1,20: PRINT "DISPLAY PORTFOLIO VALUE": PRINT: PRINT 630 PRINT "OPTIONS:": PRINT 640 PRINT TAB(10) "1. Display (on screen) Current Values;" 650 PRINT TAB(10) "2. Print Current Values;" 660 PRINT TAB(10) "3. Print, in BOLD face, Current Values;" 670 PRINT TAB(10) "9. HELP;" 680 PRINT TAB(9) "10. Return to Primary Options." 690 LOCATE 20,1 700 PRINT "Be sure PORTFOL.DAT is in Drive B before selecting #1, #2 or #3." 710 CMD$="Enter Selection:" 720 RETURN 730 REM *************** PORTFOLIO VALUE FUNCTION KEYS ************************* 740 KEY(1) ON: KEY(4) OFF: KEY(5) OFF: KEY(6) OFF: KEY(7) OFF: KEY(8) OFF 750 ON KEY(1) GOSUB 2300: ON KEY(2) GOSUB 2570: ON KEY(3) GOSUB 2560 760 ON KEY(9) GOSUB 6380: ON KEY(10) GOSUB 6400 770 RETURN 780 REM ******************** STOCK PURCHASE SCREEN **************************** 790 CLS: LOCATE 1,20: PRINT "STOCK PURCHASE": PRINT: PRINT 800 INPUT "Enter Name of Company: ",N$ 810 INPUT "Enter ID of Company: ",I$ 820 INPUT "Enter Number of Shares Purchased: ",SH% 830 INPUT "Enter Date of Purchase: ",D$ 840 INPUT "Enter Purchase Price (Basis): ",PR 850 PRINT "Enter Purchase Source: OM - Open market; SP - Stock Plan" 860 PRINT TAB(24) "EF - Father's Estate; GF - Gift" 870 PRINT TAB(24) "EM - Mother's Estate; DR - Dividend Reinvest"; 880 INPUT " ",S$ 890 IF LEFT$(N$,3) <> "IBM" THEN 930 900 INPUT "Enter Avg. Mkt. Price (DOP): ",MP 910 INPUT "Enter Date of Offering: ",O$ 920 IN=(INT((MP-PR)*100+0.5))/100 930 INPUT "Enter Certificate Number: ",C$ 940 LOCATE 20,1 950 PRINT "Be Sure PURCHASE.DAT is in Drive B. Press ENTER when Ready." 960 A$=INKEY$: IF A$="" THEN 960 970 ACT$="Processing Purchase": GOSUB 360 980 RETURN 990 REM ******************* PURCHASE FUNCTION KEYS **************************** 1000 KEY(2) OFF: KEY(3) OFF: KEY(4) OFF: KEY(5) OFF: KEY(6) OFF: KEY(7) OFF 1010 KEY(8) OFF: KEY(9) OFF: ON KEY(1) GOSUB 2840: ON KEY(10) GOSUB 6400 1020 RETURN 1030 REM *********************** STOCK SALE SCREEN **************************** 1040 CLS:LOCATE 1,24:PRINT "STOCK SALE":PRINT:PRINT 1050 INPUT "Enter Name of Company: ",N$ 1060 INPUT "Enter ID of Company: ",I$ 1070 INPUT "Enter Date of Sale: ",D$ 1080 INPUT "Enter Date of Purchase or M (Multi) ",DP$ 1090 INPUT "Enter Number of Shares Sold: ",SH% 1100 INPUT "Enter Net Proceeds of Sale: ",PN 1110 PRINT "Enter Type of Disposition: OM - Open Market; GF - Gift" 1120 PRINT TAB(28) "GM - Gift to Minor; GS - Gift to Education"; 1130 INPUT " ",PT$ 1140 LOCATE 20,1 1150 PRINT "Be Sure PURCHASE.DAT is in Drive B. Press ENTER when Ready." 1160 A$=INKEY$: IF A$="" THEN 1160 1170 ACT$="Processing Sale": GOSUB 360 1180 RETURN 1190 REM ********************* SALE FUNCTION KEYS ***************************** 1200 KEY(2) OFF: KEY(3) OFF: KEY(4) OFF: KEY(5) OFF: KEY(6) OFF: KEY(7) OFF 1210 KEY(8) OFF: KEY(9) OFF: ON KEY(1) GOSUB 3160: ON KEY(10) GOSUB 6400 1220 RETURN 1230 REM ***************** UPDATE PURCHASE FILE SCREEN ************************ 1240 CLS: LOCATE 1,20: PRINT "UPDATE PURCHASE RECORDS": PRINT: PRINT 1250 PRINT "OPTIONS:": PRINT 1260 PRINT TAB(10) "1. Update Certificate Number;" 1270 PRINT TAB(10) "2. Update Date Purchased or Date Sold; (N/A)" 1280 PRINT TAB(10) "3. Update Purchase Source; (N/A)" 1290 PRINT TAB(10) "4. Update Type of Sale; (N/A)" 1300 PRINT TAB(10) "9. HELP;" 1310 PRINT TAB(9) "10. Return to Primary Options." 1320 LOCATE 20,1 1330 PRINT "Be Sure PURCHASE.DAT is in Drive B before selecting #1-4." 1340 CMD$="Enter Selection:" 1350 RETURN 1360 REM **************** UPDATE PURCHASE FUNCTION KEYS *********************** 1370 KEY(1) ON: KEY(6) OFF: KEY(7) OFF: KEY(8) OFF: ON KEY(1) GOSUB 5410 1380 ON KEY(2) GOSUB 6400: ON KEY(3) GOSUB 6400: ON KEY(4) GOSUB 6400 1390 ON KEY(9) GOSUB 6430: ON KEY(10) GOSUB 6400 1400 RETURN 1410 REM ***************** UPDATE SUMMARY FILE SCREEN ************************* 1420 CLS: LOCATE 1,20: PRINT "UPDATE PORTFOLIO SUMMARY": PRINT: PRINT 1430 PRINT "OPTIONS:": PRINT 1440 PRINT TAB(10) "1. Update Current Prices;" 1450 PRINT TAB(10) "2. Update Number of Shares Owned;" 1460 PRINT TAB(10) "3. Update Current Basis (reflecting purchases);" 1470 PRINT TAB(10) "4. Add New Stock to Summary File;" 1480 PRINT TAB(10) "5. Delete Stock from Summary File;" 1490 PRINT TAB(10) "9. HELP;" 1500 PRINT TAB(9) "10. Return to Primary Options." 1510 LOCATE 20,1 1520 PRINT "Be Sure PORTFOL.DAT is in Drive B before selecting #1-5." 1530 CMD$="Enter Selection:" 1540 RETURN 1550 REM ******************** UPDATE FUNCTION KEYS **************************** 1560 KEY(7) OFF: KEY(8) OFF: ON KEY(1) GOSUB 3720: ON KEY(2) GOSUB 3880 1570 ON KEY(3) GOSUB 4060: ON KEY(4) GOSUB 4240: ON KEY(5) GOSUB 4530 1580 ON KEY(9) GOSUB 6410: ON KEY(10) GOSUB 6400 1590 RETURN 1600 REM ****************** INITIALIZE FILES SCREEN *************************** 1610 CLS: LOCATE 1,23: PRINT "INITIALIZE FILES": PRINT: PRINT 1620 PRINT "OPTIONS:": PRINT 1630 PRINT TAB(10) "1. Initialize Portfolio Summary File (PORTFOL.DAT);" 1640 PRINT TAB(10) "2. Initialize Purchase and Sale Detail File (PURCHASE.DAT);" 1650 PRINT TAB(9) "10. Return to Primary Options." 1660 LOCATE 20,1 1670 PRINT "Be Sure a Formatted Diskette is in Drive B before selecting #1-2." 1680 CMD$="Enter Selection:" 1690 RETURN 1700 REM ***************** INITIALIZE FUNCTION KEYS *************************** 1710 KEY(3) OFF: KEY(4) OFF: KEY(5) OFF: KEY(6) OFF: KEY(7) OFF: KEY(9) OFF 1720 ON KEY(1) GOSUB 5720: ON KEY(2) GOSUB 5810: ON KEY(10) GOSUB 6400 1730 RETURN 1740 REM ***************** INITIALIZE PORTFOL SCREEN ************************** 1750 CLS:LOCATE 1,18: PRINT "INITIALIZE `PORTFOL.DAT'": PRINT: PRINT 1760 PRINT "Enter Data for First Stock purchased (others can be added using" 1770 PRINT "the Add Stock Feature - #4 on Option List of Primary Option F6):" 1780 PRINT:INPUT " Enter Name of Company (up to 19 chars.): ",I$ 1790 INPUT " Enter Number of Shares Owned: ",SH% 1800 INPUT " Enter Basis Price of Stock: ",BS 1810 PRINT:PRINT "Use Other Features to Complete Initial Record." 1820 CMD$="Press F10 to Return to Options:" 1830 RETURN 1840 REM ****************** INITIALIZE PURCH SCREEN *************************** 1850 CLS:LOCATE 1,18: PRINT "INITIALIZE `PURCHASE.DAT'": PRINT: PRINT 1860 PRINT "Enter data for first stock purchased (others can be added using" 1870 PRINT "the Record Stock Purchase Feature - #2 on Primary Option List):" 1880 PRINT: INPUT "Enter Name of Company (up to 19 chars.): ",N$ 1890 INPUT "Enter ID of Company: ",I$ 1900 INPUT "Enter Number of Shares Purchased: ",SH% 1910 INPUT "Enter Date of Purchase: ",D$ 1920 INPUT "Enter Purchase Price (Basis): ",PR 1930 PRINT "Enter Purchase Source: OM - Open Market; SP - Stock Plan" 1940 PRINT TAB(24) "EF - Father's Estate; GF - Gift" 1950 PRINT TAB(24) "EM - Mother's Estate; DR - Dividend Reinvest"; 1960 INPUT " ",S$ 1970 PRINT:PRINT "Use other features as needed to complete the initial record." 1980 CMD$="Press F10 to Return to Options:" 1990 RETURN 2000 REM *********************** DESCRIBE SCREEN 1 **************************** 2010 CLS: LOCATE 1,20: PRINT "STOCK PORTFOLIO MANAGEMENT": PRINT 2020 PRINT "Two key data files are maintained and used by the STOCK PORTFOLIO" 2030 PRINT "MANAGEMENT System, one to record your current summarized position" 2040 PRINT "(PORTFOL.DAT), and the other to hold the history of your purchase" 2050 PRINT "and sale transactions (PURCHASE.DAT). Data items carried in both" 2060 PRINT "files are used to support the portfolio management functions that" 2070 PRINT "are provided. Specific functions for file maintenance and update" 2080 PRINT "can be selected, together with functions to display and print the" 2090 PRINT "portfolio summary or history. 2100 PRINT 2110 PRINT "To begin, you should INITIALIZE each file on a `formatted', blank" 2120 PRINT "diskette (F8 on Primary Option Screen), by entering one item into" 2130 PRINT "into each file. Additional items should then be added, using the" 2140 PRINT "standard functions, until PURCHASE.DAT contains an entry for each" 2150 PRINT "transaction, and PORTFOL.DAT has an entry for each stock you own." 2160 PRINT "The two files can be kept on the same diskette, assuring that the" 2170 PRINT "loading of either file results in the loading of the other. It is" 2180 PRINT "also important to build the habit of keeping backup copies of the" 2190 PRINT "files, to guard against data loss or inconvience." 2200 CMD$="Press F10 to Return to Options:" 2210 ON KEY(10) GOSUB 230 2220 GOSUB 310 'COMMAND PROMPT 2230 RETURN 2240 REM ****************** PORTFOLIO VALUE ROUTINE *************************** 2250 GOSUB 620 'DISPLAY OPTIONS 2260 GOSUB 740 'ACTIVATE FUNCTION KEYS 2270 GOSUB 310 'COMMAND PROMPT 2280 RETURN 2290 REM *********************** STOCKVAL ROUTINE ***************************** 2300 GOSUB 5890 'OPEN PORTFOL.DAT 2310 GET #1,1 2320 CLS: LOCATE 2,60: PRINT DT$: PRINT 2330 PRINT TAB(21) "VALUE OF PERSONAL STOCK HOLDINGS" 2340 LOCATE 6,1 2350 PRINT "Company"; TAB(21);"Shrs";TAB(29) "Price";TAB(41) "Value";TAB(53) "Basis";TAB(67) "Gain": PRINT 2360 RN=1: VLT=0: GNT=0 2370 GET #1,RN 2380 IF EOF(1) THEN 2480 2390 SH%=CVI(SH$): PR=CVS(PR$): VL=CVS(VL$): BS=CVS(BS$): GN=CVS(GN$) 2400 PRINT ID$; 2410 PRINT USING " ###"; SH%; 2420 PRINT USING " $$##.###"; PR; 2430 PRINT USING " $$#####,.##"; VL; 2440 PRINT USING " $$####,.##"; BS; 2450 PRINT USING " $$#####,.##-"; GN 2460 VLT=VLT+VL: GNT=GNT+GN 2470 RN=RN+1: GOTO 2370 2480 PRINT: PRINT TAB(25) "total value:"; 2490 PRINT USING "$$#####,.##";VLT; 2500 PRINT TAB(51) "total gain:"; 2510 PRINT USING "$$#####,.##-";GNT 2520 CLOSE #1: CMD$="Press F2 (or F3) to Print Values, F10 to Return:" 2530 GOSUB 310 'COMMAND PROMPT 2540 RETURN 2550 REM ********************** PRINT STOCKVAL ROUTINE ************************ 2560 LPRINT CHR$(27);"E"; 'SET BOLD PRINT 2570 GOSUB 5880 'OPEN PORTFOL.DAT 2580 ACT$="Printing": GOSUB 360 'DISPLAY ACTION 2590 GET #1,1 2600 LPRINT: LPRINT TAB(60) DT$: LPRINT 2610 LPRINT TAB(21) "VALUE OF PERSONAL STOCK HOLDINGS": LPRINT 2620 LPRINT "Company"; TAB(21);"Shrs";TAB(29) "Price";TAB(41) "Value";TAB(53) "Basis";TAB(67) "Gain": LPRINT 2630 RN=1: VLT=0: GNT=0 2640 GET #1,RN 2650 IF EOF(1) THEN 2750 2660 SH%=CVI(SH$): PR=CVS(PR$): VL=CVS(VL$): BS=CVS(BS$): GN=CVS(GN$) 2670 LPRINT ID$; 2680 LPRINT USING " ###"; SH%; 2690 LPRINT USING " $$##.###"; PR; 2700 LPRINT USING " $$#####,.##"; VL; 2710 LPRINT USING " $$####,.##"; BS; 2720 LPRINT USING " $$#####,.##-"; GN 2730 VLT=VLT+VL: GNT=GNT+GN 2740 RN=RN+1: GOTO 2640 2750 LPRINT: LPRINT TAB(25) "total value:"; 2760 LPRINT USING "$$#####,.##";VLT; 2770 LPRINT TAB(51) "total gain:"; 2780 LPRINT USING "$$#####,.##-";GNT 2790 CLOSE #1: LPRINT CHR$(27);"F";CHR$(12); 2800 ACT$="Done": GOSUB 360 'DISPLAY ACTION 2810 CMD$="Press F10 to Return to Options:": GOSUB 310 'COMMAND PROMPT 2820 RETURN 2830 REM ******************* STOCK PURCHASE ROUTINE *************************** 2840 GOSUB 790 'DISPLAY SCREEN 2850 GOSUB 1000 'ACTIVATE FUNCTION KEYS 2860 GOSUB 5930 'OPEN PURCHASE FILE 2870 RN=1: T$="B" 'SET RECORD NUMBER - SET `BUY' 2880 GET #1,RN 2890 IF 0=EOF(1) THEN 2920 2900 GOSUB 3110 'DO LSETs 2910 PUT #1,RN: GOTO 3080 'PUT AS LAST RECORD 2920 IF LEFT$(ID$,LEN(I$)) > I$ THEN 2950 2930 IF LEFT$(ID$,LEN(I$)) = I$ THEN T$="A" 2940 RN=RN+1: GOTO 2880 2950 FIELD #1, 81 AS BF$ 2960 B$=BF$ 'INPUT BUFFER TO HOLD BUFFER 2970 GOSUB 5940 'RESET FIELD STMT 2980 GOSUB 3110 'REDO LSETs 2990 PUT #1,RN: RN=RN+1: BB$=B$ 'HOLD BUFFER TO OUTPUT BUFFER 3000 GET #1,RN 3010 IF EOF(1) THEN 3050 3020 FIELD #1, 81 AS BF$ 3030 B$=BF$ 'INPUT BUFFER TO HOLD BUFFER 3040 LSET BF$=BB$: GOTO 2990 'OUTPUT BUFFER TO RECORD - GO PUT 3050 LSET BF$=BB$ 'LAST TIME 3060 PUT #1,RN 3070 ACT$="Done": GOSUB 360 'DISPLAY ACTION 3080 CLOSE #1: CMD$="Press F1 to Enter Another, F10 to Return:" 3090 GOSUB 310 'COMMAND PROMPT 3100 RETURN 3110 LSET ID$=I$: LSET NM$=N$: LSET SH$=MKI$(SH%): LSET DT$=D$ 3120 LSET PR$=MKS$(PR): LSET SR$=S$: LSET CT$=C$: LSET MP$=MKS$(MP) 3130 LSET DO$=O$: LSET IN$=MKS$(IN): LSET TR$=T$ 3140 RETURN 3150 REM ******************** STOCK SALE ROUTINE ****************************** 3160 GOSUB 1040 'DISPLAY SCREEN 3170 GOSUB 1200 'ACTIVATE FUNCTION KEYS 3180 GOSUB 5930 'OPEN PURCHASE FILE 3190 RN=1: T$="S" 'SET RECORD NUMBER - SET "SELL" 3200 GET #1,RN 3210 IF 0=EOF(1) THEN 3230 3220 PRINT "No Corresponding Purchase Record Found - ABORT": GOTO 3490 3230 IF LEFT$(ID$,LEN(I$)) < I$ THEN RN=RN+1: GOTO 3200 3240 IF LEFT$(ID$,LEN(I$)) = I$ THEN 3260 3250 IF LEFT$(ID$,LEN(I$)) > I$ THEN 3220 3260 IF DP$ <> "M" AND DP$ <> "m" THEN 3540 3270 IF TR$="A" OR TR$="B" THEN NSO=CVI(SH$): RN=RN+1: GOTO 3290 3280 IF TR$="S" OR TR$="P" THEN 3220 ELSE 3320 3290 GET #1,RN 3300 IF LEFT$(ID$,LEN(I$))>I$ THEN 3340 3310 IF LEFT$(ID$,LEN(I$))=I$ THEN 3330 3320 PRINT "File Out of Sequence - ABORT": GOTO 3490 3330 IF TR$="A" OR TR$="B" THEN NSO=NSO+CVI(SH$): RN=RN+1: GOTO 3290 3340 IF NSO >= SH% THEN 3360 3350 PRINT "Insufficient Shares to Sell - ABORT": GOTO 3490 3360 FIELD #1, 81 AS BF$ 3370 B$=BF$ 'INPUT BUFFER TO HOLD BUFFER 3380 FIELD #1, 2 AS ID$, 19 AS NM$, 2 AS SH$, 18 AS XX$, 8 AS DS$, 4 AS PN$, 2 AS ST$, 25 AS YY$, 1 AS TR$ 3390 LSET ID$=I$: LSET NM$=N$: LSET SH$=MKI$(SH%): LSET XX$=" ": LSET DS$=D$ 3400 LSET PN$=MKS$(PN): LSET ST$=PT$: LSET YY$=" ": LSET TR$="P" 3410 PUT #1,RN: RN=RN+1: BB$=B$ 'HOLD BUFFER TO OUTPUT BUFFER 3420 GET #1,RN 3430 IF EOF(1) THEN 3470 3440 FIELD #1, 81 AS BF$ 3450 B$=BF$ 'INPUT BUFFER TO HOLD BUFFER 3460 LSET BF$=BB$: GOTO 3410 'OUTBUFFER TO RECORD - GO PUT 3470 LSET BF$=BB$ 'LAST TIME 3480 PUT #1,RN 3490 ACT$="Done": GOSUB 360 'DISPLAY ACTION 3500 CLOSE #1: CMD$="Press F1 to Enter Another, F10 to Return:" 3510 GOSUB 310 'COMMAND PROMPT 3520 RETURN 3530 REM ******** SALE OF ENTIRE PURCHASE RECORD ********** 3540 IF DT$<>DP$ THEN RN=RN+1: GOTO 3200 3550 IF SH%<>CVI(SH$) THEN 3270 3560 GN=PN-CVS(PR$): T$="S" 3570 NY1=VAL(RIGHT$(DT$,2)): NY2=VAL(RIGHT$(D$,2)) 3580 IF NY2-NY1>=2 THEN LS$="L": GOTO 3630 3590 NM1=VAL(RIGHT$(DT$,2)): NM2=VAL(RIGHT$(D$,2)) 3600 IF NY2-NY1=1 THEN NM2=NM2+12 3610 IF NM2-NM1>=6 THEN LS$="L": GOTO 3630 'SET LONG TERM 3620 LS$="S" 'SET SHORT TERM 3630 LSET DS$=D$: LSET PN$=MKS$(PN): LSET ST$=PT$: LSET GN$=MKS$(GN) 3640 LSET TP$=LS$: LSET TR$=T$ 3650 PUT #1,RN: GOTO 3490 'DONE - GO CLOSE AND RETURN 3660 REM ***************** UPDATE SUMMARY FILE ROUTINE ************************ 3670 GOSUB 1420 'DISPLAY OPTION SCREEN 3680 GOSUB 1560 'ACTIVATE FUNCTION KEYS 3690 GOSUB 310 'COMMAND PROMPT 3700 RETURN 3710 REM ************************ UPPRICE ROUTINE ***************************** 3720 CLS:LOCATE 1,20: PRINT "STOCK PRICE UPDATE": PRINT: PRINT 3730 INPUT "Enter Date of Prices: ",D$ 3740 RN=1: PRINT 3750 GOSUB 5890 'OPEN PORTFOLIO FILE 3760 GET #1,RN 3770 IF EOF(1) THEN 3840 3780 PRINT "For: ";ID$;: INPUT ", enter new price: ",PR 3790 SH%=CVI(SH$): BS=CVS(BS$) 3800 VL=(INT(SH%*PR*100+0.5))/100 'RECALCULATE VALUE 3810 GN=(INT((VL-BS)*100))/100 'RECALCULATE GAIN (LOSS) 3820 LSET DT$=D$: LSET PR$=MKS$(PR): LSET VL$=MKS$(VL): LSET GN$=MKS$(GN) 3830 PUT #1,RN: RN=RN+1: GOTO 3760 3840 CLOSE #1: CMD$="Press F10 to Return to Options:" 3850 GOSUB 310 'COMMAND PROMPT 3860 RETURN 3870 REM ************************ UPSHARE ROUTINE ***************************** 3880 CLS: LOCATE 1,20: PRINT "STOCK SHARE UPDATE": PRINT: PRINT 3890 RN=1 3900 GOSUB 5890 'OPEN PORTFOLIO FILE 3910 GET #1,RN 3920 IF EOF(1) THEN 4020 3930 SH%=CVI(SH$) 3940 PRINT "For: ";ID$;",SH=";SH%;: INPUT ". Enter new SH or -1: ",SH% 3950 IF SH%=-1 THEN 4010 3960 PR=CVS(PR$): BS=CVS(BS$) 3970 VL=(INT(SH%*PR*100+0.5))/100 'RECALCULATE VALUE 3980 GN=(INT((VL-BS)*100))/100 'RECALCULATE GAIN (LOSS) 3990 LSET SH$=MKI$(SH%): LSET VL$=MKS$(VL): LSET GN$=MKS$(GN) 4000 PUT #1,RN 4010 RN=RN+1: GOTO 3910 4020 CLOSE #1: CMD$="Press F10 to Return to Options:" 4030 GOSUB 310 'COMMAND PROMPT 4040 RETURN 4050 REM ************************* UPBASIS ROUTINE **************************** 4060 CLS: LOCATE 1,20: PRINT "STOCK BASIS UPDATE": PRINT: PRINT 4070 RN=1 4080 GOSUB 5890 'OPEN PORTFOLIO FILE 4090 GET #1,RN 4100 IF EOF(1) THEN 4200 4110 BS=CVS(BS$) 4120 PRINT "For: ";ID$;",BS=";BS;: INPUT ". Enter new BS or -1: ",BS 4130 IF BS=-1 THEN 4190 4140 PR=CVS(PR$): SH%=CVI(SH$) 4150 VL=CVS(VL$) 4160 GN=(INT((VL-BS)*100+0.5))/100 'RECALCULATE GAIN (LOSS) 4170 LSET BS$=MKS$(BS): LSET GN$=MKS$(GN) 4180 PUT #1,RN 4190 RN=RN+1: GOTO 4090 4200 CLOSE #1: CMD$="Press F10 to Return to Options:" 4210 GOSUB 310 'COMMAND PROMPT 4220 RETURN 4230 REM ************************ RECORD ADD ROUTINE ************************** 4240 CLS: LOCATE 1,24: PRINT "ADD STOCK": PRINT: PRINT 4250 RN=1 4260 INPUT "Enter Name of Company (up to 19 chars.): ",I$ 4270 INPUT "Enter Number of Shares Owned: ",SH% 4280 INPUT "Enter Current Price of Stock: ",PR 4290 INPUT "Enter Date (of Price): ",D$ 4300 INPUT "Enter Basis Price of Shares: ",BS 4310 VL=(INT(SH%*PR*100+0.5))/100 'CALCULATE VALUE 4320 GN=(INT((VL-BS)*100))/100 'CALCULATE GAIN (LOSS) 4330 OPEN "B:PORTFOL.DAT" AS #1 4340 GET #1,RN 4350 E%=EOF(1): IF E% THEN RN=RN+1: GOTO 4390 4360 FIELD #1, 19 AS ID$, 26 AS XX$ 4370 IF LEFT$(ID$,LEN(I$)) < I$ THEN RN=RN+1: GOTO 4340 4380 IF LEFT$(ID$,LEN(I$)) = I$ THEN PRINT "Duplicate! Use Updates.": GOTO 4490 4390 FIELD #1,45 AS BF$: B$=BF$ 4400 FIELD #1,19 AS ID$,2 AS SH$,8 AS DT$,4 AS PR$,4 AS VL$,4 AS BS$,4 AS GN$ 4410 LSET ID$=I$: LSET SH$=MKI$(SH%): LSET DT$=D$: LSET PR$=MKS$(PR) 4420 LSET VL$=MKS$(VL): LSET BS$=MKS$(BS): LSET GN$=MKS$(GN) 4430 PUT #1,RN: IF E% THEN 4490 ELSE RN=RN+1: BB$=B$ 4440 GET #1,RN 4450 E%=EOF(1): IF E% THEN FIELD #1,45 AS BF$: LSET BF$=BB$: GOTO 4430 4460 FIELD #1, 45 AS BF$ 4470 B$=BF$: LSET BF$=BB$: BB$=B$ 4480 PUT #1,RN: RN=RN+1: GOTO 4440 4490 CLOSE#1: CMD$="Press F10 to Return to Options:" 4500 GOSUB 310 'COMMAND PROMPT 4510 RETURN 4520 REM ********************** RECORD DELETE ROUTINE ************************* 4530 CLS: LOCATE 1,23: PRINT "DELETE STOCK": PRINT: PRINT 4540 RN=1: RP=1 4550 INPUT "Enter Name of Company (as carried in file): ",I$ 4560 ACT$="Processing Delete": GOSUB 360 4570 OPEN "B:PORTFOL.DAT" AS #1 4580 OPEN "B:SCRATCH.DAT" AS #2 4590 GET #1,RN 4600 IF EOF(1) THEN 4660 4610 FIELD #1, 19 AS ID$, 26 AS XX$ 4620 IF LEFT$(ID$,LEN(I$))=I$ THEN RN=RN+1: GOTO 4590 4630 FIELD #2, 19 AS SD$, 26 AS SX$ 4640 LSET SD$=ID$: LSET SX$=XX$ 4650 PUT #2,RP: RN=RN+1: RP=RP+1: GOTO 4590 4660 CLOSE #1: CLOSE #2: KILL "B:PORTFOL.DAT" 4670 OPEN "B:SCRATCH.DAT" AS #1: OPEN "B:PORTFOL.DAT" AS #2 4680 RN=1 4690 GET #1,RN 4700 IF EOF(1) THEN 4730 4710 FIELD #1,45 AS SX$: FIELD #2,45 AS XX$ 4720 LSET XX$=SX$: PUT #2,RN: RN=RN+1: GOTO 4690 4730 CLOSE #1: CLOSE #2: KILL "B:SCRATCH.DAT" 4740 ACT$="Done": GOSUB 360 4750 CMD$="Press F10 to Return to Options:" 4760 GOSUB 310 'COMMAND PROMPT 4770 RETURN 4780 REM *********** STOCK PURCHASE AND SALE REPORT ROUTINE******************** 4790 CLS: LOCATE 1,18: PRINT "STOCK PURCHASE and SALE REPORT": PRINT: PRINT 4800 PRINT "Be Sure `PURCHASE.DAT' is in Drive B. Press ENTER when Ready." 4810 A$=INKEY$: IF A$="" THEN 4810 4820 LOCATE 4,1: PRINT SPACE$(70) 4830 ACT$="Printing Non-IBM" 4840 GOSUB 360 'DISPLAY ACTION 4850 RN=1 4860 LPRINT CHR$(15): WIDTH "LPT1:",132 'SET PRINTER - COMPRESSED at 132 4870 GOSUB 5930 'OPEN PURCHASE FILE 4880 LPRINT TAB(100) DATE$: LPRINT 4890 LPRINT TAB(40) "STOCK PURCHASE and SALE RECORDS - Non IBM": LPRINT 4900 LPRINT "ID Company Shrs Date Pur. Price Date Sold S. Price Gain(Loss) Tp Ts Src Cert.# Tr" 4910 LPRINT 4920 GET #1,RN 4930 IF EOF(1) THEN 5070 4940 IF LEFT$(NM$,3)="IBM" THEN 5060 4950 PN=CVS(PN$): GN=CVS(GN$) 4960 SH%=CVI(SH$): PR=CVS(PR$) 4970 LPRINT ID$;" ";NM$; 4980 LPRINT USING " ###";SH%; 4990 LPRINT TAB(33) DT$; 5000 LPRINT USING " $$####,.##";PR; 5010 LPRINT TAB(56) DS$;TAB(65) " "; 5020 LPRINT USING " $$####,.##";PN; 5030 LPRINT TAB(78) " "; 5040 LPRINT USING " $$####,.##-";GN;: LPRINT TAB(95) TP$; 5050 LPRINT TAB(100) ST$; TAB(106) SR$; TAB(111) CT$; TAB(122) TR$ 5060 RN=RN+1: GOTO 4920 'BACK FOR NEXT 5070 RN=1: LPRINT CHR$(12); 'TAB PRINTER 5080 LOCATE 4,1: PRINT "End of Non-IBM Listing. Press any Key to Continue." 5090 A$=INKEY$: IF A$="" THEN 5090 5100 LOCATE 4,1: PRINT SPACE$(70) 5110 ACT$="Printing IBM": GOSUB 360 'DISPLAY ACTION 5120 LPRINT TAB(100) DATE$: LPRINT 5130 LPRINT TAB(40) "STOCK PURCHASE and SALE RECORDS - IBM Stock": LPRINT 5140 LPRINT "Shrs Date Pur. Price Avg Mkt Ord In Off Date Date Sold S. Price Gain(Loss) Tp Ts Src Cert.#" 5150 LPRINT 5160 GET #1,RN 5170 IF EOF(1) THEN 5290 5180 IF LEFT$(NM$,3) <> "IBM" THEN 5280 5190 SH%=CVI(SH$): PR=CVS(PR$): MP=CVS(MP$): IN=CVS(IN$): 5200 PN=CVS(PN$): GN=CVS(GN$) 5210 LPRINT USING "### ";SH%;: LPRINT DT$;: LPRINT USING " $$####,.##";PR; 5220 LPRINT USING " $$####,.##";MP;: LPRINT USING " $$###.## ";IN; 5230 LPRINT DO$; TAB(60) DS$; TAB(69) " "; 5240 LPRINT USING " $$####,.##";PN; 5250 LPRINT TAB(82) " "; 5260 LPRINT USING " $$####,.##";GN;: LPRINT TAB(99) TP$; 5270 LPRINT TAB(104) ST$; TAB(110) SR$; TAB(115) CT$ 5280 RN=RN+1: GOTO 5160 5290 ACT$="Done": GOSUB 360 5300 CLOSE #1: LPRINT CHR$(18);CHR$(12);: WIDTH "LPT1:",80 5310 KEY(10) ON: ON KEY(10) GOSUB 6400 5320 CMD$="Press F10 to Return to Options:" 5330 GOSUB 310 'COMMAND PROMPT 5340 RETURN 5350 REM **************** UPDATE PURCHASE FILE SCREEN ************************* 5360 GOSUB 1240 'DISPLAY OPTION SCREEN 5370 GOSUB 1370 'ACTIVATE FUNCTION KEYS 5380 GOSUB 310 'COMMAND PROMPT 5390 RETURN 5400 REM ******************* CERTIFICATE UPDATE ROUTINE *********************** 5410 CLS:LOCATE 1,20: PRINT "STOCK CERTIFICATE UPDATE": PRINT: PRINT 5420 RN=1: NM=0 5430 GOSUB 5930 'OPEN FILE 5440 INPUT "Enter Date of Purchase (MM/DD/YY): ",D$ 5450 INPUT "Enter Company Name: ",N$ 5460 INPUT "Enter Number of Shares: ",NS 5470 GET #1,RN 5480 IF EOF (1) THEN 5600 5490 IF D$ <> DT$ THEN 5590 5500 IF LEFT$(NM$,5) <> LEFT$(N$,5) THEN 5590 5510 IF NS <> CVI(SH$) THEN 5590" 5520 NM=1 5530 PRINT "Certificate = ";CT$;: INPUT ". Enter New Cert. Num. or -1: ",C$ 5540 IF C$ = "-1" THEN 5560 5550 LSET CT$=C$: PUT #1,RN 5560 INPUT "Another? (Y or N): ",A$ 5570 IF A$ <> "Y" AND A$ <> "y" THEN 5600 5580 RN=RN+1: GOTO 5440 5590 RN=RN+1: GOTO 5470 5600 CLOSE #1 5610 IF NM=0 THEN PRINT "No Qualifying Record Found! Please Verify Parameters." 5620 CMD$="Press F1 to Return to Update Options (F10 for Primary List):" 5630 KEY(1) ON: ON KEY(1) GOSUB 5360: ON KEY(10) GOSUB 6400 5640 GOSUB 310 'COMMAND PROMPT 5650 RETURN 5660 REM ****************** INITIALIZE FILES ROUTINE ************************** 5670 GOSUB 1610 'DISPLAY OPTION SCREEN 5680 GOSUB 1710 'ACTIVATE FUNCTION KEYS 5690 GOSUB 310 'COMMAND PROMPT 5700 RETURN 5710 REM ****************** INITIALIZE PORTFOL ROUTINE ************************ 5720 GOSUB 1750 'DISPLAY INPUT SCREEN 5730 OPEN "B:PORTFOL.DAT" AS #1 5740 FIELD #1, 19 AS ID$,2 AS SH$,16 AS XX$,4 AS BS$,4 AS XY$ 5750 LSET ID$=I$: LSET SH$=MKI$(SH%): LSET XX$=" ": LSET BS$=MKS$(BS) 5760 LSET XY$=" " 5770 PUT #1,1: CLOSE #1 'WRITE INITIAL RECORD 5780 GOSUB 310 'COMMAND PROMPT 5790 RETURN 5800 REM ****************** INITIALIZE PURCH ROUTINE ************************** 5810 GOSUB 1850 'DISPLAY INPUT SCREEN 5820 GOSUB 5930 'OPEN PURCHASE FILE 5830 LSET ID$=I$: LSET NM$=N$: LSET SH$=MKI$(SH%): LSET DT$=D$ 5840 LSET PR$=MKS$(PR): LSET SR$=S$ 5850 PUT #1,1: CLOSE #1 'WRITE INITIAL RECORD 5860 GOSUB 310 'COMMAND PROMPT 5870 RETURN 5880 REM ******************** OPEN PORTFOLIO.DAT ****************************** 5890 OPEN "B:PORTFOL.DAT" AS #1 5900 FIELD #1,19 AS ID$,2 AS SH$,8 AS DT$,4 AS PR$,4 AS VL$,4 AS BS$,4 AS GN$ 5910 RETURN 5920 REM ********************* OPEN PURCHASE.DAT ****************************** 5930 OPEN "B:PURCHASE.DAT" AS #1 5940 FIELD #1,2 AS ID$,19 AS NM$,2 AS SH$,8 AS DT$,4 AS PR$,4 AS MP$,2 AS SR$,8 AS DS$,4 AS PN$,2 AS ST$,4 AS GN$,1 AS TP$,8 AS CT$,4 AS IN$,8 AS DO$,1 AS TR$ 5950 RETURN 5960 REM *********************** LOGO SCREEN ********************************** 5970 CLS: KEY OFF 5980 B$=CHR$(220): B3$=STRING$(3,B$): B4$=B$+B3$: B5$=B4$+B$: B6$=B3$+B3$ 5990 B7$=B4$+B3$: B8$=B4$+B4$: B9$=B6$+B3$: BT$=B5$+B5$: BE$=B8$+B4$ 6000 S$=" ": S2$=S$+S$: S3$=S$+S2$: S4$=S2$+S2$: S5$=S4$+S$ 6010 S6$=S3$+S3$: S7$=S3$+S4$ 6020 LOCATE 2,14: PRINT B7$;S$;BT$;S3$;B6$;S7$;B6$ 6030 LOCATE 3,14: PRINT B7$;S$;BE$;S$;B7$;S5$;B7$ 6040 LOCATE 4,16: PRINT B3$;S5$;B3$;S4$;B3$;S3$;B6$;S3$;B6$ 6050 LOCATE 5,16: PRINT B3$;S5$;B9$;S4$;B7$;S$;B7$ 6060 LOCATE 6,16: PRINT B3$;S5$;B9$;S4$;B3$;S$;B7$;S$;B3$ 6070 LOCATE 7,16: PRINT B3$;S5$;B3$;S4$;B3$;S3$;B3$;S2$;B5$;S2$;B3$ 6080 LOCATE 8,14: PRINT B7$;S$;BE$;S$;B5$;S3$;B3$;S3$;B5$ 6090 LOCATE 9,14: PRINT B7$;S$;BT$;S3$;B5$;S4$;B$;S4$;B5$ 6100 LOCATE 11,25: PRINT "Personal Computer" 6110 T1$=STRING$(66,"*") 6120 T2$="STOCK PORTFOLIO MANAGEMENT v 1.00" 6130 T3$="Personal Finance for the IBM Personal Computer, from SoftPic" 6140 T4$="Copyright 1982, SoftPic Corporation, Stamford, Conn. 06903" 6150 T5$="Author: Art M. Pickard" 6160 LOCATE 13,20: PRINT T2$ 6170 LOCATE 15,1: PRINT T1$ 6180 PRINT "* ";T3$;TAB(66) "*": PRINT "* ";T4$; 6190 PRINT TAB(66) "*": PRINT "*";TAB(66) "*" 6200 PRINT "* ";T5$;TAB(66) "*": PRINT T1$ 6210 RETURN 6220 REM ********************* WELCOME SCREEN ******************************** 6230 CLS: LOCATE 2,1 6240 PRINT "Welcome to STOCK PORTFOLIO MANAGEMENT. You will find a number of" 6250 PRINT "useful functions are provided to ease the record keeping for your" 6260 PRINT "personal investment portfolio. These functions are selected from" 6270 PRINT "the Primary Option Screen by pressing one of the 10 Function Keys" 6280 PRINT "to select the desired function. In some cases, an additional set" 6290 PRINT "of choices will then be displayed. Choices are again selected by" 6300 PRINT "pressing a Function Key.":PRINT 6310 PRINT "Most options operate against one or more files, which must be put" 6320 PRINT "into Drive B, prior to function start. The two files you need to" 6330 PRINT "get started are named and described when you request the DESCRIBE" 6340 PRINT "(Key 9) function. Please read this material before attempting to" 6350 PRINT "use the other functions." 6360 RETURN 6370 REM ********************** HELP SCREENS ********************************** 6380 CLS: PRINT "F1 - HELP" 6390 RETURN 6400 GOTO 230 6410 CLS: PRINT "F6 - HELP" 6420 RETURN 6430 CLS: PRINT "F5 - HELP" 6440 RETURN